#include "../head/server.h"

extern TCP_info_t TCP_info[MAX_TCPS];

void ask(int epoll_fd)
{
	int i;
	while (1)
	{
		time_t current_time = time(NULL); // 得到当前时间
		for (i = 0; i < MAX_TCPS; i++)
		{
			if (TCP_info[i].net_fd != -1 && current_time - TCP_info[i].last_activity > TIMEOUT_SECONDS)
			{
				printf("客户端net_fd为：%d的连接，超时未发送消息，断开！\n", TCP_info[i].net_fd);
				// 超时了，有两件事要做：1.不再对这个TCP连接进行epoll监听；2.关闭连接，并且把TCP结构体在逻辑上删除超时的连接；

				// 1.从epoll监听中移除该TCP连接，这里在主线程那里有个epollDelFD函数
				epollDelFD(epoll_fd, TCP_info[i].net_fd);

				// 2关闭连接，结构体逻辑删除，只要把net_fd改成-1就行
				close(TCP_info[i].net_fd);
				TCP_info[i].net_fd = -1;
				bzero(TCP_info[i].username, sizeof(TCP_info[i].username));
			}
		}
		sleep(1); // 休眠1秒，避免频繁轮询，这样ask函数每1s只需要一次触发，消耗CPU很低，并且实现批量超时的处理
	}
}

// ask线程的启动函数
void *ask_thread(void *arg)
{
	int epoll_fd = *((int *)arg);
	ask(epoll_fd);
	return NULL;
}